大漠開始寫部落格,並拍照紀錄旅遊,就碰上了「照片備份」的問題,於是上網找了開始方法,並免自己一直手動複製資料浪費時間。
看了其他攝影師的方法就是「硬碟外接盒」做「磁碟陣列 RAID 1」 或是「NAS」做「磁碟陣列 RAID 6」的熱備份,而「熱備份」比較消耗硬碟的壽命,結論就是有點燒錢啊 😖
後來發現了 Window 的 Robocopy 也有辦法做「鏡像同步」、「差異備份」,重點是可以「冷備份」延長硬碟的壽命,而且可以也跟「RAID 6」有效率的使用硬碟空間,不會因為「 RAID 1」要備份,有一半的空間無法使用的缺點 😀
那接下來的內容就是範例實作和排程設定,還有分享一下大漠幫 Robocopy 寫了一個 UI 介面 (使用者介面),方便自己操作的範例 😎
最後是一些 Robocopy 在「鏡像同步」使用到的參數的說明 😊
前言
一、使用 Robocopy 進行「資料夾」鏡像同步
(一)、範例
(二)、電腦自動執行「鏡像同步」(設定排程)
二、製作成「小工具軟體」範例
三、 Robocopy 指令說明
(一)、「基本指令」說明
1. 「鏡像同步」基本指令
2. 「指令參數」說明
(二)、「進階指令」說明
1. 「鏡像同步」進階指令
2. 「指令參數」說明
(三)、「最終指令」說明 (最推指令)
1. 「鏡像同步」最終指令
2. 「指令參數」說明
先開啟「記事本」。
輸入「Robocopy <你的來源資料夾> <你的目的地資料夾> /mir /xo /e」。
上面是最簡易的指令,習慣操作之後,建議參考「進階指令」和「最終指令」做更詳細的設定 (後頭提供)。
範例 : Robocopy D:\TEST D:\TEST2 /mir /xo /e。
接下來將檔案儲存程「Windows 批次檔案 (.bat)」,「檔名」跟「路徑」就自己決定吧 😁
測試範例 :「TEST」資料夾有 7 個檔案,而「TEST2」資料夾沒有檔案。
可以直接滑鼠雙擊剛剛所建立的「Windows 批次檔案 (.bat)」,執行 Robocopy 進行「鏡像同步 (差異備份)」。
但是大漠想要看 Log,所以就使用「終端機」執行 😋
先到「Windows 批次檔案 (.bat)」,並輸入批次檔案名稱)」,執行 Robocopy 進行「鏡像同步 (差異備份)」。
不會操作「終端機」也沒關西,待會的 「進階指令」會教如何將 Log 輸出成檔案,如不想看 Log 就不要理會這段啦 😆
下圖是執行 Robocopy 的結果 (Log)。
確定「TEST」資料夾下的 7 個檔案,都複製到「TEST2」資料夾下了 😁
再來就使用 Windows 內建的「工作排程器」設定排程,來模擬「雲端硬碟」的同步 ,但是沒有即時同步的功能,最少會有 5 分鐘的時間差 😋
先建立新的「排程工作」。
先幫自己的排程命名 ~ (自己取名)
再來最重要的選項「不論使用者登入與否均執行」、「不要儲存密碼」、「以最高權限執行」和「隱藏」都要勾選,不然每次執行排程時,都會有效視窗跑出來吵你 😅
再來就到「處發程序」頁籤,新增「執行的時間」的設定。
選擇「每天」,重複工作每隔 「5 分鐘」,持續時間「不限制」,在確定最重要的「已啟用」有被勾選,最後按下「確定」,完成「執行的時間」的設定。
「處發程序」頁籤,就會多一筆資料,這樣一來之後「每 5 分鐘」就會自動「鏡像同步 (差異備份)」兩個資料夾了 🎉
再來就到「動作」頁籤,新增「要執行的程式 (指令碼)」的設定。
程式或指令碼,選擇剛剛建立的「Windows 批次檔案 (.bat)」,開始位置填入「批次檔案」的路徑,按下「確定」,完成「要執行的程式 (指令碼)」的設定。
「動作」頁籤,就會多一筆資料,在按下「確定」完成所有設定 👍
「工作排程器」上就多了一筆工作後,這樣就可以進行測試了 ~
在 12 : 55 時,於「TEST」資料夾下,新增一筆資料「8.jpg」。
5 分鐘後,系統就自動將「8.jpg」複製到「TEST2」資料夾下 🎊
大漠備份的頻率沒有很高,暫時沒有打算使用排程作鏡像備份,但又為了自己方便操作,於是就大漠幫 Robocopy 寫了一個「圖形使用者介面 (GUI)」😁
其中「鏡像同步」會用到的「進階指令」,大漠也把它加入進「大漠自製的小工具」,雖然不知道甚麼時候會用到,但我相信以後「進階指令」會用到,重點是「看起來比較專業」😂
接下來就演示一下「大漠自製的小工具」操作過程 ~
透過「圖形使用者介面 (GUI)」選擇「來源資料夾」,就不怕輸入錯誤,或者打字打得很累 😆
接續著選擇「目的地資料夾」~
雖然不怕打錯字,但就怕自己選錯囉 😂
所以絕對不要選反,不然要備份的資料,反而被刪除 😖
「log 路徑」就屬於「進階指令」的範圍囉 ~
如果不小心關掉視窗,還有機會再看看「鏡像同步」的狀況 😊
在「TEST」資料夾下,新增一筆資料「9.jpg」。
按下「鏡像同步」開始備份 ~
視窗下面的「執行結果」會顯示原本「執行 Robocopy 的結果」🎉
「TEST2」資料夾下,多了一個資料「9.jpg」,確實完成備份 😎
再來看看「log 檔案」,有出現再大漠指定的「log 路徑」下 👍
「log 檔案」一樣是記錄著「執行 Robocopy 的結果」😏
從「紅框 1」的內容中,可以看出來大漠使用的「鏡像同步」指令。
而 「紅框 2」的內容中,可以看到「Robocopy」發現了一個新檔案「9.jpg」,並有完成備份,執行進度為 100% 😊
鏡像同步的「基本指令」指令,有以下兩種 :
如果檔案有設定過「安全性設定」,如 : 特定帳號才可瀏覽編輯的設定,就建議使用「第一種指令」,確保複製過後去的檔案也保留這些「安全性設定」。
如果自己也不清楚的話,還是建議使用「第一種指令」最保險 😆
// 第一種,會覆寫「目的地資料夾」安全性設定。
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /mir /xo /e
// 第二種,不覆寫「目的地資料夾」安全性設定。
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /purge
/e
複製子資料夾 (包含空的資料夾)
/xo
比較「來源檔案」與「目的地檔案」,若「來源檔案」較新則複製,否則排除不複製 (差異備份,所需參數)
/purge
刪除不存在於「來源資料夾」中的檔案 (差異備份,所需參數)
/mir
鏡像資料夾 (相當於同時使用 /e 和 /purge 參數)。
大漠針對了「搬檔效率」、「Log 資訊」需求,又挑選了部分的參數做使用,使其功能更完善 😎
更多參數詳 微軟 Robocopy 學習網。
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /mir /mt: /dcopy:dat /xa:sh /xj /unicode /eta /R:5 /W:30 /tee /unilog+:D:\mirrorDir.txt /v
/mt:<n>
使用 n 個執行緒,執行工作。(如同 n 個人一起搬運檔案) 預設值是 8,最上值128。
需搭配使用 /log 參數,集中倒出,提升效能。
/log:<logfile>
使用系統編碼(Big5)寫入記錄檔。(若記錄檔已存在,覆寫現有的記錄檔)
/log+:<logfile>
使用系統編碼(Big5)寫入記錄檔。(若記錄檔已存在,接續寫入記錄檔)
/unilog:<logfile>
使用 UTF-8 編碼寫入記錄檔。(若記錄檔已存在,覆寫現有的記錄檔)
/unilog+:<logfile>
使用 UTF-8 編碼寫入記錄檔。(若記錄檔已存在,接續寫入記錄檔)
/dcopy:<copyflags>
複製資料夾的內容。
D - 資料
A - 屬性
T - 時間戳記
E - 擴充屬性
X - 略過替代資料流
此選項的預設值為 DA (資料和屬性)。
/xa:[RASHCNETO]
符合以下屬性的檔案不處理。
R - 唯讀
A - 封存
S - 系統
H - 隱藏
C - 已壓縮
N - 未編製內容索引
E - 已加密
T - 暫存
O - 離線
/xj
不複製 NTFS junction 檔案。
/unicode
輸出內容使用 UTF-8 編碼。
/eta
顯示所複製檔案的預估抵達時間 (ETA)。
/r:<n>
複製失敗,重新嘗試的次數,n 的預設值為 1,000,000 (一百萬次重試)。
/w:<n>
複製失敗,重新嘗試的等候時間,以秒為單位,n 的預設值為 30 (等待時間為 30 秒)。
/tee
將狀態輸出寫入主控台視窗及記錄檔。
/v
產生詳細資訊輸出,並顯示所有略過的檔案。
這大漠自己在用的指令,也是最推薦的指令,顧及了「搬檔效率」、「Log 資訊」和「資安疑慮」🚓
Robocopy <來源資料夾(檔案)> <目的地資料夾(檔案)> /e /xo /mir /mt: /dcopy:dat /xa:sh /xj /unicode /eta /R:5 /W:30 /tee /unilog+:D:\mirrorDir.txt /v /xf *.tmp *.ds_store *.temp ~desktop.ini ~hiberfil.sys ~pagefile.sys ~thumbs.db ~swapfile.sys ~NTUSER.DAT ~ntuser.dat.LOG1 ~ntuser.dat.LOG2 $recycle.bin config.msi ntuser.dat ntuser.ini /xd "C:\Windows" "C:\ProgramData\Microsoft\Windows\Caches" "C:\Drivers" "C:\Temp" "C:\Documents and Settings" "*MSOCache*" "*RecycleBin*" "*recycler*" "*System Volume Information*"
避免複製系統的重要檔案,引發資安問題,大漠就使用「/xf」及「/xd」兩項參數,排除了系統「特定檔案」及「特定路徑」。
以下說明有列出排除「檔案」及「路徑」,給大家參考。
/xf <filename>[ ...]
符合指定名稱或路徑的檔案,支援使用萬用字元 (* 和 ?)。
*.tmp
*.ds_store
*.temp
~desktop.ini
~hiberfil.sys
~pagefile.sys
~thumbs.db
~swapfile.sys
~NTUSER.DAT
~ntuser.dat.LOG1
~ntuser.dat.LOG2
$recycle.bin
config.msi
ntuser.dat
ntuser.ini
/xd <directory>[ ...]
排除符合指定名稱和路徑的目錄。
"C:\Windows"
"C:\ProgramData\Microsoft\Windows\Caches"
"C:\Drivers"
"C:\Temp"
"C:\Documents and Settings"
"*MSOCache*"
"*RecycleBin*"
"*recycler*"
"*System Volume Information*"